package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.example.demo.dao.ParameterDefinitionDao;
import com.example.demo.domain.entity.ParameterDefinitionEntity;
import com.example.demo.domain.model.Parameter;
import com.example.demo.domain.model.ParameterDefinition;
import com.example.demo.service.ParameterDefinitionService;
import com.example.demo.util.ParameterEntityToVO;
import com.example.demo.util.ParameterVOToEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class ParameterDefinitionServiceImpl implements ParameterDefinitionService {
    @Autowired
    ParameterDefinitionDao parameterDefinitionDao;
    @Autowired
    ParameterVOToEntity parameterVOToEntity;
    @Autowired
    ParameterEntityToVO parameterEntityToVO;

    @Override
    public boolean existById(Long id) {
        if (id == null) {
            return false;
        }
        return parameterDefinitionDao.selectById(id) != null;
    }

    @Override
    public ParameterDefinitionEntity getById(Long id) {
        return parameterDefinitionDao.selectById(id);
    }

    @Override
    public int updateById(ParameterDefinitionEntity entity) {
        return parameterDefinitionDao.updateById(entity);
    }

    @Override
    public void savePdList(Parameter parameter, Long rootId, Long pid) {
        List<ParameterDefinition> parameterDefinitionList = parameter.getParameterDefinitions();
        for (ParameterDefinition parameterDefinition : parameterDefinitionList) {
            saveOnePd(rootId, pid, parameterDefinition);
        }
    }

    @Override
    public void saveOnePd(Long rootId, Long pid, ParameterDefinition parameterDefinition) {
        ParameterDefinitionEntity pd = parameterVOToEntity.transferParameterDefinitionToEntity(parameterDefinition);
        pd.setParameterRootId(rootId);
        pd.setParentId(pid);
        parameterDefinitionDao.insert(pd);
        parameterDefinition.setId(pd.getId());
    }

    @Override
    public List<ParameterDefinitionEntity> listByRootId(Long parameterRootId) {
        LambdaQueryWrapper<ParameterDefinitionEntity> q1 = Wrappers.lambdaQuery(ParameterDefinitionEntity.class).eq(ParameterDefinitionEntity::getParameterRootId, parameterRootId);
        return parameterDefinitionDao.selectList(q1);
    }
    @Override
    public int deleteById(Long id) {
        return parameterDefinitionDao.deleteById(id);
    }
    @Override
    public int deleteByPid(Long pid) {
        LambdaQueryWrapper<ParameterDefinitionEntity> q1 = Wrappers.lambdaQuery(ParameterDefinitionEntity.class).eq(ParameterDefinitionEntity::getParentId, pid);
        return parameterDefinitionDao.delete(q1);
    }
}
